package com.voodoo.lib_http.callback;

import okhttp3.Call;
import okhttp3.Request;
import okhttp3.Response;

/**
 * Author: voodoo
 * CreateDate: 2021/05/29
 * Description:
 */
public abstract class Callback<T> {

    /**
     * 请求开始
     *
     * @param request {@link okhttp3.Request}
     * @param id      请求id
     */
    public void onRequestStart(Request request, int id) {
    }

    /**
     * 请求中...
     *
     * @param progress 当前进度
     * @param total    总进度
     * @param id       请求id
     */
    public void onRequesting(long progress, long total, int id) {
    }

    /**
     * 请求成功
     *
     * @param id 请求id
     */
    public void onRequestComplete(int id) {
    }

    /**
     * 如果需要在parseNetworkResponse中解析回传的code, 那么应该此方法的返回值置为true
     */
    public boolean validateReponse(Response response, int id) {
        return response.isSuccessful();
    }

    /**
     * 解析网络相应（线程池中的线程）
     */
    public abstract T parseNetworkResponse(Response response, int id) throws Exception;

    /**
     * 请求响应回调
     *
     * @param response 响应体
     * @param id       请求id
     */
    public abstract void onResponse(T response, int id);

    /**
     * 网络请求失败
     *
     * @param call      {@link Call}
     * @param exception 异常信息
     * @param id        请求id
     */
    public abstract void onError(Call call, Exception exception, int id);

    public static Callback CALLBACK_DEFAULT = new Callback() {
        @Override
        public Object parseNetworkResponse(Response response, int id) throws Exception {
            return null;
        }

        @Override
        public void onError(Call call, Exception exception, int id) {
        }

        @Override
        public void onResponse(Object response, int id) {
        }
    };

}
